package zyd.springboot.springbootmybatis.service.imp;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import zyd.springboot.springbootmybatis.entity.User;
import zyd.springboot.springbootmybatis.mapper.UserMapper;
import zyd.springboot.springbootmybatis.service.UserService;
import zyd.springboot.springbootmybatis.service.ex.InsertException;
import zyd.springboot.springbootmybatis.service.ex.LoginException;
import zyd.springboot.springbootmybatis.service.ex.UsernameDuplicateException;

/*
@Service注解表示UserServiceImpl交给springboot管理
* */
@Service
public class UserServiceImpl implements UserService {

    /*因为UserMapper是接口，假如没这个，idea会提示mapper没有实现类，标红
    而springboot会根据动态代理，反射机制，自动创建对应接口的实例*/
    @Autowired(required = false)
    UserMapper mapper;//mapper：依赖注入
    @Override
    public User login(User user)
            throws LoginException {
        // 基于用户名查用户数据
        User userData=null;
        try{
            userData=mapper.findUserByUname(user.getUsername());
            // 查不到 -> 登录失败->抛异常 LoginException
        }catch (Exception e){
            e.printStackTrace();
            throw new LoginException("登录异常："+e.getMessage(),e);
        }
        if(userData==null){
            throw new LoginException("登录异常：用户名不存在，请注册");
        }
        if(!(user.getPassword().equals(userData.getPassword()))){//判断表单的数据和数据库数据密码是否一致
            throw new LoginException("登录异常：用户名密码错误");
        }
        System.out.println("业务判断，登陆成功");
        userData.setPassword(null);
        return userData;
    }

    @Override
    public void register(User user)
            throws UsernameDuplicateException, InsertException {
// 判断用户名是否存在
        User userData=null;
        try{
            userData=mapper.findUserByUname(user.getUsername());
        }catch (Exception e){
            e.printStackTrace();
            throw new InsertException("注册异常：查询用户名异常",e);
        }
        if(userData!=null){
            // 是：UsernameDuplicateException
            throw new UsernameDuplicateException("注册异常：用户名已存在");
        }
        // 调用持久层方法，添加用户数据
        int row=0;
        try{
            row=mapper.insertUser(user);
        }catch (Exception e){
            e.printStackTrace();
            throw new InsertException("注册异常：添加用户信息异常",e);
        }
        // 判断返回值是否不为1
        if(row!=1){
            // 是：InsertException
            throw new InsertException("注册异常：添加用户信息失败");
        }
    }



}
